
Ext.BLANK_IMAGE_URL='/wsd/image/page/s.gif';
Ext.QuickTips.init();
/**
 * 系统的主js文件
 */
var viewport;
var loginWindow;//登录界面
var commandPanel;//控制面板
var tabPanel;//主面板
var lockWindow;//锁定窗口
var loginForm;//登入面板
var taskRunner = new Ext.util.TaskRunner();
/**
 * 
 * 判断用户状态线程
 */

var stateTask = {
	run:function(){
		chenckState();
	},
	interval:60000*30
};
var dbLockCheckTask = {
	run:isDbLock,
	interval:60000*5
}
//监控系统是否给用户发送了消息，以及用户现在又多少条未读的消息
var msgTask = {
    run: getMsgAmount,
    interval: 60000 * 3
}
function Admin(adminId,adminName){
	this.adminId = adminId;
	this.adminName = adminName;
	
}
var admin;//登录用户
Ext.onReady(function(){
	
	loginSystem();
	
	
})
/***********************方法***************************************/
/**
 * 检查用户状态
 */
function chenckState(){
	
	var waitWindow = new Ext.Window({
			id:'reLoginInfo0',
			title:'系统消息',
			modal:true,
			closable:false,
			resizable:false,
			width:400,
			autoHeight:true,
			draggable:false,
			items:[{
				html:'你好由于你长时间为操作，已被系统强制退出，请重新登录！'
			}],
			buttons:[
				{
					xtype:'button',
					text:'确定',
					handler:function(){
						Ext.getCmp('reLoginInfo0').close();
						viewport.destroy();
						loginSystem();
					}
				}
			]
		});
		
	Ext.Ajax.request({
		url:'sys/sys_checkState.action',
		success:function(response){
			var result = Ext.util.JSON.decode(response.responseText).result;
			var login = result.login;
			
			if(login == true){
			}else{
				waitWindow.show();
				//taskRunner.stop(stateTask);//关闭监听线程
			}
			
		},
		fialure:function(response){
			Ext.Msg.alert('信息','与服务器失去连接');
			loginSystem();
		}
	})
}
/**
 * 测试数据库时候锁住
 */
function checkDbState(){
	var lockWindow = new Ext.Window({
			id:'reLoginInfo0',
			title:'系统消息',
			modal:true,
			closable:false,
			resizable:false,
			width:400,
			autoHeight:true,
			draggable:false,
			html:'你好系统这在维护中，请您稍后访问',
			buttons:[
				{
					xtype:'button',
					text:'确定',
					handler:function(){
						Ext.getCmp('reLoginInfo0').close();
						viewport.destroy();
						loginSystem();
					}
				}
			]
		});
}
/**
 * 登录系统
 */
function loginSystem(){
	loginForm = new Ext.FormPanel({
		id:'loginForm',
		defaultType:'textfield',
		labelAlign:'left',
		labelWidth:50,
		frame:true,
		url:'admin/sys_login.action',
		items:[
			{
				fieldLabel:'用户名',
				xtype:'textfield',
				//maxLength : 8,
				//minLength: 8,
				//minLengthText : '工号只能为8为数字组成',
				//minLengthText : '工号只能为8为数字组成',
				id:'admin.adminName',
				value:'admin',
				allowBlank:false,
				listeners:{specialkey:function(field,e){
					if(e.getKey() == 13){//回车键被按下
							login();			
					}
				}}
				
			},
			{
				fieldLabel:'密码',
				id:'admin.adminPass',
				allowBlank:false,
				value:'123',
				inputType:'password',
				listeners:{specialkey:function(field,e){
					if(e.getKey() == 13){//回车键被按下
							login();			
					}
				}}
			}],
		buttons:[{
			id:'login',
			text:'登入',
			handler:login
		}]
	});
	Ext.getCmp('admin.adminName').focus(true,500);
	function login(){
		if(!Ext.getCmp('admin.adminName').validate()){
			Ext.getCmp('admin.adminName').focus(true,500);
			return false;
		}
		if(!Ext.getCmp('admin.adminPass').validate()){
			Ext.getCmp('admin.adminPass').focus(true,500);
			return false;
		}
		if(Ext.getCmp('admin.adminName').getValue() == null || Ext.getCmp('admin.adminName').getValue() == ''){
			Ext.Msg.alert('系统信息','用户名不能为空');
			Ext.getCmp('admin.adminName').focus(true,500);
			return false;
		}
		Ext.getCmp('loginForm').getForm().submit({
			waitMsg:'正在登陆请稍后……',
			success:function(form,action){
				var a = action.result.result.admin;
				admin = new Admin(a.adminId,a.adminName);
				initSystem();
				loginWindow.close();
				
			},
			failure:function(form,action){
				Ext.Msg.alert('信息',action.result.result.loginMsg,function(){
					Ext.getCmp('admin.adminPass').focus(true,200);
				});
			}
				
		});
	}
	loginWindow = new Ext.Window({
		title:'系统登录',
		modal:true,
		closable:false,
		resizable:false,
		width:400,
		autoHeight:true,
		draggable:false,
		closeAction:'hide',
		draggable:false,
		items:[loginForm]
	});
	loginWindow.show();
	
}



/**
 * 初始化系统
 */
function initSystem(){
	createCommandPanel();
	createTabPanel();
	createViewport();
	//taskRunner.start(stateTask);//登录成功 判断用户状态线程启动
	//taskRunner.start(dbLockCheckTask);//开始监听数据库状态
	//taskRunner.start(msgTask);//登录成功后监听系统是否给用户发送了消息，以及用户现在有多少条未读的信息
}
/**
 * 根据用户类型生成右边的控制面板
 */
function createCommandPanel(){
	var jsonUrl = 'admin/data/commandTree.json';//得到不同用户对应的json文件 格式为  用户类型.json
	commandPanel = new Ext.tree.TreePanel({
		title:'控制面板',
		region:'west',
		width:200,
		collapsible:true,
		frame:true,
		rootVisible:false,
		autoScroll:true,
		root:new Ext.tree.AsyncTreeNode({id:'root',text:'控制面板'}),
		loader:new Ext.tree.TreeLoader({
			url:jsonUrl
		})
		
	});
	commandPanel.expandAll();
	commandPanel.on('click',treeHandler);
}
/**
 * 创建主面板，根据用户类型 加载不同的页面
 */
function createTabPanel(){
	
	tabPanel = new Ext.TabPanel({
		enableTabScroll: true,
		deferredRender:false,
		frame:true,
		//autoDestroy: false, //关闭panel不自动销毁
		items:[
				{
					id:'index',
					title:'首页',
					frame:true,
					layout:'fit'
				}
			],
		activeTab:0
	});
}
/**
 * 登录成功创建界面
 */
function createViewport(){
	//构建界面
	
	var header = new Ext.Panel({
		region:'north',
		height:100,
		frame:true,
		collapsible:true,
		html:'<h1>文士达科技有限公司</h1>'
	});

	var bottom = new Ext.Panel({
		region:'south',
		frame:true,
		html:'<span style="float:rigth">版本: 2010 v1.03 Release</span>'
	});
	//getMsgAmount();
	var toolbar = new Ext.Toolbar({
		items:[
				{
					text:'您好:' + admin.adminName ,
					xtype:'tbtext'
				},
				'->',
				{
					text:'修改密码',
					handler:modifyPass
				
				},
				//'-',
				{
					text:'锁定',
					handler:lock
				},
				{
					text:'退出',
					handler:exit
				}
			]
	});
	viewport = new Ext.Viewport({
		layout:'border',
		items:[header,commandPanel,
				{
					region:'center',
					layout:'fit',
					items:[tabPanel],
					tbar:toolbar
				},bottom]
		
	});
	
}

/***********************事件*****************************/

/**
 * 修改密码
 */
function modifyPass(){
	
	var oldPassword = new Ext.form.TextField({
		fieldLabel:'旧密码',
		inputType:'password'
	});
	var newPassword = new Ext.form.TextField({
		inputType:'password',
		fieldLabel:'新密码'
	});
	var configPassword = new Ext.form.TextField({
		inputType:'password',
		fieldLabel:'确认密码',
		listeners:{'blur':function(field){
			var configPasswordText = field.getValue();
			var newPasswordText = newPassword.getValue();
			if(newPasswordText != null && configPasswordText == null ){
				Ext.Msg.alert('系统信息','确认密码，不能为空！');
				configPassword.focus();
			}
			if((newPasswordText != configPasswordText) && configPasswordText != null){
				Ext.Msg.alert('系统信息','确认密码 和新密码不一致！');
				configPassword.focus();
			}
		}}
	});
	
	
	var modifyPassWindow = new Ext.Window({
		title:'修改密码',
		modal:true,
		closable:false,
		resizable:false,
		width:300,
		heigth:200,
		//animateTarget:'target',
		frame:true,
		layout:'form',
		draggable:false,
		items:[
				oldPassword,newPassword,configPassword,
				{
					layout:'column',
					frame:true,
					items:[
						{
							columnWidth:.5,
							xtype:'button',
							text:'修改',
							handler:function(){
								var configPasswordText = configPassword.getValue();
								var newPasswordText = newPassword.getValue();
								var oldPasswordText = oldPassword.getValue();
								if(!validatePassord(configPasswordText,newPasswordText,oldPasswordText)){
									return;
								}
								modifyPassw(newPasswordText,oldPasswordText,modifyPassWindow);
							}
						},
						{
							columnWidth:.5,
							xtype:'button',
							text:'取消',
							handler:function(){
								modifyPassWindow.close();
							}
						}
					]
				}
		]
	});
	modifyPassWindow.show();
	/********************方法*********************/
	function validatePassord(configPasswordText,newPasswordText,oldPasswordText){
		if(oldPasswordText == null || oldPasswordText == ''){
			Ext.Msg.alert('系统信息','旧密码，不能为空！');
			oldPassword.focus();
			return false;
		}
		if(newPasswordText == null || newPasswordText == ''){
			Ext.Msg.alert('系统信息','新密码不能为空！');
			newPassword.focus();
			return false;
		}
		
		if(configPasswordText == null || configPasswordText == ''){
			Ext.Msg.alert('系统信息','确认密码不能为空！');
			configPassword.focus();
			return false;
		}
		
		if(newPasswordText != configPasswordText){
			Ext.Msg.alert('系统信息','确认密码 和 新密码 不匹配请重试');
			return false;
		}
		return true;
	}
	/**
	 * 修改密码
	 * @param {} configPasswordText
	 * @param {} newPasswordText
	 * @param {} oldPasswordText
	 */
	function modifyPassw(newPasswordText,oldPasswordText,window){
		Ext.Ajax.request({
			url:'admin/sys_modifyPassw.action',
			params:{
				newPassword:newPasswordText,
				oldPassword:oldPasswordText
			},
			success:function(response){
				var result = Ext.util.JSON.decode(response.responseText).result;
				if(!result.operateResult){
					Ext.Msg.alert('系统信息',result.msg);
				}else{
					Ext.Msg.alert('系统信息',result.msg);
					if(result.modifyResult){
						window.close();
					}
				}
			},
			failure:function(){
				Ext.Msg.alert('系统信息','连接错误，请重试!');
			}
		})
	}
	
}

/**
 * 系统锁定
 */
function lock(){
	//viewport.hide();//隐藏主面板
	var lockPassw = '';
	//taskRunner.stop(stateTask);
	//taskRunner.stop(dbLockCheckTask);
	//taskRunner.stop(msgTask);
	lockWindow = new Ext.Window({
		title:'系统锁定',
		height:400,
		modal:true,
		closable:false,
		resizable:false,
		width:300,
		layout:'border',
		items:[
			{
				region:'north',
				html:'系统锁定，,请不要设置于登入密码一样的密码<br/>'
			},
			{
				region:'center',
				//layout:'fit',
				id:'lockForm',
				items:[
					{
						xtype:'form',
						labelAlign:'left',
						labelWidth:80,
						items:[
							{
								id:'lockPassw',
								inputType:'password',
								xtype:'textfield',
								fieldLabel:'解锁密码'
							},
							{
								id:'confirmPassw',
								inputType:'password',
								xtype:'textfield',
								fieldLabel:'确认密码'
							}],
						buttons:[
							{
								id:'lockBtn',
								text:'锁定',
								handler:function(){
									if(Ext.getCmp('lockPassw').getValue() == Ext.getCmp('confirmPassw').getValue()){
										//当密码一致是的处理
										lockPassw = Ext.getCmp('lockPassw').getValue();
										Ext.getCmp('lockPassw').reset();
										Ext.getCmp('confirmPassw').el.parent().parent().hide();  
										Ext.getCmp('lockBtn').hide();
										Ext.getCmp('lockCancelBtn').hide();
										Ext.getCmp('unLockBtn').show();
									}else{
										Ext.Msg.alert('信息','密码不一致,请确认');
									}
								}
							},
							{
								id:'lockCancelBtn',
								text:'取消',
								handler:function(){
									lockWindow.close();
									//taskRunner.start(stateTask);
									//taskRunner.start(dbLockCheckTask);
									//taskRunner.start(msgTask);
								}
							},
							{
								id:'unLockBtn',
								text:'解锁',
								hidden:true,
								handler:function(){
									if(Ext.getCmp('lockPassw').getValue() == lockPassw){
										lockWindow.close();
										//taskRunner.start(stateTask);
										//taskRunner.start(dbLockCheckTask);
										//taskRunner.start(msgTask);
									}else{
										Ext.Msg.alert('密码错误');
									}
								}
							}
						]
					}
				]
			}
		]
	});
	lockWindow.show();
	lockWindow.maximize();
	
}
/**
 * 退出系统
 */
function exit(){
	//taskRunner.stop(stateTask);
	//taskRunner.stop(msgTask);
	Ext.Msg.confirm("警告","你确定要退出吗?",function(btnValue){
		
		if(btnValue == 'yes'){
			Ext.Msg.wait('正在退出，请稍后……');
			Ext.Ajax.request({
				url:'admin/sys_logout.action',
				success:function(response){
					Ext.Msg.hide();
					viewport.destroy();
					loginSystem();
				},
				failure:function(response){
					Ext.Msg.hide();
					Ext.Msg.alert('信息','退出失败');
					//taskRunner.start(stateTask);
					//taskRunner.start(msgTask);
				}
			})
		}else{
			//taskRunner.start(stateTask);
			//taskRunner.start(msgTask);
		}
		
	});
}
/**
 * 
 * @param {} url 新建panel的id，和应用html的位置
 */
function createPanel(panelId,panelTitle){
	var panel = new Ext.Panel({
		id:panelId,
		title:panelTitle,
		closable:true,
		layout:'fit',
		//autoLoad:{url:panelId + '.jsp',scripts:true}
		html:'<iframe src="/wsd/admin/' + panelId + '.jsp" width="100%" height="100%" frameBorder="0"></iframe>' 
		//autoLoad:{url:'own_staff_achievement.jsp',scripts:true}
	});
	
	tabPanel.add(panel);
	tabPanel.setActiveTab(panel);
	//isDbLock();
}
	
	
	/**
	 * 判断数据库是否已锁定
	 */
	var warm = false;
	function isDbLock(){
		//如果有空面板 且 还未警告 者警告
		if(tabPanel.items.getCount() > 1 && !warm){
				Ext.Ajax.request({
				url:'sys/dbState.action',
				success:function(response){
					var isLock = Ext.util.JSON.decode(response.responseText).result.dbLock;
					if(isLock){
						dbLock();
					}
				}
			});
		}
		
	}


/************************************事件**************************************/
function treeHandler(node,e){
	/**
	 * 如果不是叶子节点则退出
	 */
	if(!node.isLeaf()){
		return;
	}
	var panelId = node.attributes.id;
	var panelTitle = node.attributes.text;
	var panel = tabPanel.getComponent(panelId);
	/**
	 * 如果存在让其显示出来
	 */
	if(panel){
		tabPanel.add(panel);
		tabPanel.setActiveTab(panel);
	}else{
		createPanel(panelId,panelTitle);
		
	}
}
/**
 * 用户查看的系统消息
 */
function msgQuery(){
    
    var msgpane = new Ext.Panel({
        title: '系统消息',
        id: 'msgpane43434',
		closable : true,
		html : '<iframe src="/GDB_Appraisal/msgQuery.jsp" width="100%" height="100%" frameborder="0" ></iframe>'
    });
    
    tabPanel.add(msgpane);
    tabPanel.setActiveTab(msgpane);
    isDbLock();
    
}

//获得系统消息的条数
function getMsgAmount(){
    Ext.Ajax.request({
        url: '/GDB_Appraisal/sys/sys_MsgQuery.action',
        success: function(response){
            var v = Ext.util.JSON.decode(response.responseText)
            var returnvalue = v.result.s;
            if (returnvalue > 0) {
                Ext.getCmp('soc').setText("<span style='color:red;'>您有" + returnvalue + "条未读消息</span>");
            }
            else {
                Ext.getCmp('soc').setText('您没有未读消息');
            }
        },
        failure: function(response){
            Ext.Msg.alert('系统信息','检测邮件信息，操作失败.请重新登录');
        },
        // 传参数
        params: {}
    });
}